In a data processing system with a storage sub-system, some computational tasks are split by the programmer between one compute element and another compute element associated with the storage sub-system, thereby achieving better overall computational efficiency. However, achieving such task-splitting would normally require explicit programming of the various compute elements and data managing elements. Needed are systems and methods to reduce the complexity of programming such systems.